public class test11_7_1{
    public static void main(String[] args) {
        //算数运算符
        int a = 10;
        long b = 3;
        // int c = a + b;  //编译错误，类型不匹配，是long类型
        long c = a + b;  //类型匹配，是long类型
        System.out.println("c = " + c);

        //浮点数运算
        double d = 3 + 3.14;
        int d2 = 31 / 3;
        System.out.println(d);
        System.out.println(d2);

        //取余运算
        int e = 10 % 3;
        System.out.println(e);

        //自增自减运算
        int g = 30;
        g++;
        g--;

        g = 10;
        int h = g++;  //先赋值，再自增
        int i = ++g;  //先自增，再赋值

        System.out.println(h);
        System.out.println(i);

        //赋值运算符
        //int k = 3;
        //int m = 4;
        a += b;  //a = a + b;
        System.out.println(a);

        a = 3;
        a *= b + 3;
        System.out.println(a);

        //关系运算符
        int m = 3;
        int n = 4;
        boolean t = m > n;
        System.out.println(t);

        char j = 'h';
        // char值位于0-65535之间，可以强制转换为int类型
        System.out.println((int)j);
        boolean k = j > 100;
        System.out.println(k);

        //逻辑运算符
        boolean b1 = true;
        boolean b2 = false;
        System.out.println(b1 & b2);
        System.out.println(b1 | b2);
        System.out.println(b1 ^ b2);
        System.out.println(!b1);

        //短路与、短路或
        //int b3 = 3 / 0;     //会报不能除以0的异常
        boolean b3 = 1>2 &&(4<3/0);     //使用短路与，不会执行后面的语句，这里的 3/0 不会报异常
        System.out.println(b3);

        //为运算符——指进行二进制位的运算
        int p = 7;  //7的二进制是 0111
        int q = 8;  //8的二进制是 1000
        System.out.println(p & q);
        System.out.println(p | q);
        System.out.println(p ^ q);
        System.out.println(~p);
        //移位
        int r = 5<<2;   //5*2*2
        System.out.println(r);
        System.out.println(40>>3);       //先当于 40/8

        //字符串连接符
        int s = 3;
        int u = 4;
        System.out.println(s+u);        //加号
        //条件是 String ，不是 char。若是 char，则仍然是加法
        char c1 = 'h';
        char c2 = 'i';
        System.out.println(c1+c2);      //加法
        System.out.println(" "+c1+c2);    //加一个空字符串，变成字符串连接
    
        //条件运算符——三元运算符
        int score = 90;
        String v = score>60?"及格":"不及格";
        System.out.println(v);

        int x = -100;
        int flag = x > 0 ? 1 : (x == 0 ? 0 : -1);
        System.out.println(flag);

        //优先级问题的用法
        boolean s1 = true,s2 = true,s3 = false;
        System.out.println(s1 || s2 && s3);     //逻辑运算符：非>与>或
        
        Boolean s4 = (3 > 1 || 4 > 3) && (3 < 5);
        System.out.println(s4);
    }
}




/*
 * 学习笔记
 * 运算符：
 * 1.算术运算符：+ - * / % ++ --
 * 2.关系运算符：== != > < >= <=
 * 3.逻辑运算符：&& || !
 * 4.位运算符：& | ^ ~ >> << >>>
 * 5.赋值运算符：= += -= *= /= %=
 * 6.条件运算符：? :
 * 7.字符串链接运算符：+
 * 8.instanceof运算符：判断一个对象是否是一个类的实例
 * 
 * 二元运算符的运算规则：
 * 
 * 整数运算：
 * 1.两个操作数都为整数，则结果为整数
 * 2.两个操作数中有一个为long，则结果为long
 * 
 * 浮点运算：
 * 1.两个操作数都为浮点数，则结果为浮点数
 * 2.两个操作数中有一个为double，则结果为double
 * 
 * 取模运算：其操作数可以是浮点数，一般使用整数，结果是余数，余数符号与被除数相同
 * 
 * 关系运算符：
 * 1." = "是赋值运算符，" == "是关系运算符
 * 2.关系运算符的结果是boolean型，要么是true，要么是false
 * 3." == "、" != " 是所有类型都可以使用的
 * 4. " < "、" > "、" <= "、" >= "仅针对数值类型和字符串
 * 
 * 逻辑运算符：
 * 1.逻辑与：&
 * 2.短路与：&& —— 只要有一个操作数为false，则结果为false
 * 3.逻辑或：|
 * 4.短路或：|| —— 只要有一个操作数为true，则结果为true
 * 5.逻辑非：! —— 取反
 * 6.逻辑异或：^ —— 相同为false，不同为true
 * 
 * 运算符优先级：
 * 1.括号运算符
 * 2.一元运算符
 * 3.位逻辑运算符
 * 4.递增与递减运算符
 * 5.算术运算符，先乘除后加减
 * 6.左位移右位移运算符
 * 7.关系运算符
 * 8.位运算符，逻辑与、逻辑异或、逻辑或
 * 9.逻辑与运算符
 * 10.逻辑或运算符
 * 11.条件运算符
 * 12.赋值运算符
 */